#include "bsp_gpio.h"

/**
 * @brief  GPIO初始化
 * @param  base 要初始化的GPIO组
 * @param  pin  要初始化的GPIO在组内的编号 
 * @param  config GPIO配置结构体
 * @return 无
 */
void gpio_init(GPIO_Type * base,int pin,gpio_pin_config_t * config)
{
    if(config->direction==kGPIO_DigitalInput)
    {   //输入
        base->GDIR &= ~(1<<pin); //
    }
    else //输出
    {
        base->GDIR |= 1<<pin; //
        gpio_pinwrite(base,pin,config->outputLogic);  //默认输出的电平
    }
}

/**
 * @brief 读取指定GPIO的电平值
 * @param base :要读取的GPIO组
 * @param pin:要读取的GPIO脚号
 * @retval :无
 */
int gpio_pinread(GPIO_Type * base,int pin)
{
    return ( ((base->DR)>>pin) & 0x1 );   //输出时也是DR
}

/**
 * @brief 指定GPIO输出高或者低电平
 * @param base :要输出的GPIO组
 * @param pin:要输出的GPIO脚号
 * @param value:要输出的电平  1输出高点平  0输出低电平
 * @retval :无
 */
void gpio_pinwrite(GPIO_Type * base,int pin,int value)
{
    if(value==0U)
    {
        base->DR &= ~(1U << pin);
    }
    else
    {
        base->DR |= (1U << pin);
    }
}